package top.mysql.SQL2;

public class Engine {

/**
 *
 *    MySQL体系结构：
 *    连接层    是客户端和链接服务，主要完成一些像连接处理、授权认证、及相关的安全方案。
 *             并引入了线程池。验证客户端所具有的操作权限
 *    服务层    完成大多数的核心服务功能，如SQL接口，并完成缓存的查询，SQL的分析和优化，部分内置函数的执行。所有
 *             跨存储引擎的功能也在这一层实现。服务器会解析查询并创建相应的内部解析树，并对其完成相应的优化如确定
 *             表的查询的顺序，是否利用索引等，最后生成相应的执行操作。如果是select语句，服务器还会查询内部的缓存
 *    引擎层    存储引擎层真正的负责了MySQL中数据的存储和提取，数据库中的索引是在存储引擎层实现的。
 *    存储层    数据存储层， 主要是将数据存储在文件系统之上，并完成与存储引擎的交互。
 *
 *    存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式 。存储引擎是基于表的，而不是
 *    基于库的。我们可以在创建表的时候，来指定选择的存储引擎。
 *
 *    查询当前数据库支持的存储引擎
 *    show engines;
 *
 *      ---------------------------InnoDB----------------------
 *
 *      InnoDB是一种兼顾高可靠性和高性能的通用存储引擎，在 MySQL 5.5 之后，InnoDB是默认的MySQL 存储引擎。
 *
 *      InnoDB的特点：
 *      DML操作遵循ACID模型，支持事务；
 *      行级锁，提高并发访问性能；
 *      支持外键FOREIGN KEY约束，保证数据的完整性和正确性；
 *
 *      文件：
 *      xxx.ibd：xxx代表的是表名，innoDB引擎的每张表都会对应这样一个表空间文件，
 *      存储该表的表结构（frm-早期的 、sdi-新版的）、数据和索引。
 *
 *      ---------------------------MyISAM----------------------
 *
 *      MyISAM是MySQL早期的默认存储引擎。
 *
 *      MyISAM特点：
 *      不支持事务，不支持外键
 *      支持表锁，不支持行锁
 *      访问速度快
 *
 *      文件：
 *      xxx.sdi：存储表结构信息
 *      xxx.MYD: 存储数据
 *      xxx.MYI: 存储索引
 *
 *      ---------------------------Memory----------------------
 *
 *      Memory引擎的表数据时存储在内存中的，由于受到硬件问题、或断电问题的影响，只能将这些表作为临时表或缓存使用。
 *
 *      特点：
 *      内存存放(速度快，断电无)
 *      hash索引（默认）
 *
 *      文件：
 *      xxx.sdi：存储表结构信息
 *
 *
 *      ---------------------------总结----------------------
 *
 *      特点          InnoDB              MyISAM          Memory
 *      存储限制        64TB                 有               有
 *      *事务安全        支持                  -                -
 *      *锁机制          行锁                 表锁              表锁
 *      B+tree索引     支持                 支持              支持
 *      Hash索引        -                   -               支持
 *      全文索引        支持(5.6版本之后)      支持              -
 *      空间使用        高                   低               N/A
 *      内存使用        高                   低               中等
 *      批量插入速度     低                   高               高
 *      *支持外键        支持                  -                -
 *
 *
 *      存储引擎选择：
 *      InnoDB: 是Mysql的默认存储引擎，支持事务、外键。如果应用对事务的完整性有比较高的要求，在并发条件下要求数据
 *      的一致性，数据操作除了插入和查询之外，还包含很多的更新、删除操作，那么InnoDB存储引擎是比较合适的选择。
 *
 *      MyISAM ： 如果应用是以读操作和插入操作为主，只有很少的更新和删除操作，并且对事务的完整性、
 *      并发性要求不是很高，那么选择这个存储引擎是非常合适的。(日志，电商中足迹，评论)(被MongoDB替代)
 *
 *      MEMORY：将所有数据保存在内存中，访问速度快，通常用于临时表及缓存。MEMORY的缺陷就是对表的大小有限制，
 *      太大的表无法缓存在内存中，而且无法保障数据的安全性。(被Redis替代)
 */

}
